{***************************************************************
    SpyGestion  Copyright (C) 2008 Christophe KOALI <nature2gas@gmail.com>
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
    
****************************************************************}
unit modTemplateTabDraw;

interface

uses modRapport,
     modGalaxiePlanetes,
     modTemplateMotor,
     modStatsPlayers,
     modPlayerFinal,
     modProfilsForAttack;

const

   /////////////////////////////////////////////////////
   ///   Propre au tableau de sondage
   /////////////////////////////////////////////////////

   TPL_TAB_LOOP_SONDAGE   = 'LOOP_SONDAGE_TAB';


   TPL_TAB_CONDLOOP_A_ETE_SONDE  = 'COND_A_ETE_SONDE';
   TPL_TAB_CONDLOOP_NB_SONDES    = 'COND_NB_SONDES';


   TPL_TAB_VARLOOP_DATE_SONDAGE_UNIX         = 'DATE_SONDAGE_UNIX';
   TPL_TAB_VARLOOP_DATE_SONDAGE_DURATION     = 'DATE_SONDAGE_DURATION';
   TPL_TAB_VARLOOP_DATE_SONDAGE_DURATION_STR = 'DATE_SONDAGE_DURATION_STR';


   /////////////////////////////////////////////////////
   ///   Propre au rapport
   /////////////////////////////////////////////////////

   TPL_TAB_LOOP_RAPPORT_LIST   = 'LOOP_RAPPORT_TAB';


   /////////////////////////////////////////////////////
   ///   Commun à tous les tableaux
   /////////////////////////////////////////////////////

   TPL_TAB_VARLOOP_COORD    = 'COORD';

   TPL_TAB_CONDLOOP_COORD   = 'COORD_IS_MOON';

   TPL_COND_TAB_COUNT = 'COND_ELEMENT_COUNT';




   //////////////////////////////////////
   ///   En rapport avec la galaxie
   //////////////////////////////////////

   // définit si les données de galaxie sont connu
   TPL_TAB_CONDLOOP_GALAXY_DATA_KNOW   = 'COND_GALAXY_DATA_KNOW';

   // Flags de galaxie
   TPL_TAB_CONDLOOP_PLAYER_FAIBLE       = 'COND_IS_PLAYER_WEAK';
   TPL_TAB_CONDLOOP_PLAYER_FORT         = 'COND_IS_PLAYER_STRONG';
   TPL_TAB_CONDLOOP_ASTEROIDE           = 'COND_IS_DESTROYED_PLANET';
   TPL_TAB_CONDLOOP_PLAYER_MODE_VACANCE = 'COND_IS_PLAYER_VACATION';
   TPL_TAB_CONDLOOP_PLANETE_NON_OCCUPE  = 'COND_IS_PLANET_FREE';


   // L'alliance est connu à partir de la galaxie
   TPL_TAB_CONDLOOP_IS_ALLIANCE_ALLIEE = 'COND_IS_FRIEND_ALLY';
   TPL_TAB_VARLOOP_ALLIANCE            = 'ALLY';


   TPL_TAB_CONDLOOP_INACTIF_LEVEL_1 = 'COND_INACTIVITY_LEVEL_1';
   TPL_TAB_CONDLOOP_INACTIF_LEVEL_2 = 'COND_INACTIVITY_LEVEL_2';


   TPL_TAB_VARLOOP_JOUEUR        = 'NICK';
   TPL_TAB_VARLOOP_JOUEUR_FLAGS  = 'NICK_FLAGS';



   //////////////////////////////////////
   ///   Les statistiques (possible uniquement si la galaxie est connue puisque le nom du joueur est extrait de la galaxie)
   //////////////////////////////////////

   TPL_TAB_VARLOOP_POINTS                           = 'POINTS';
   TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS          = 'COND_RANG';

   TPL_TAB_VARLOOP_POINTS_FLOTTE                    = 'POINTS_FLEET';
   TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS_FLOTTE   = 'COND_RANG_FLEET';

   TPL_TAB_VARLOOP_POINTS_RESEARCH                  = 'POINTS_RESEARCH';
   TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS_RESEARCH = 'COND_RANG_RESEARCH';



   /////////////////////////////////////////
   ///   Rapport
   /////////////////////////////////////////


   TPL_TAB_CONDLOOP_RAPPORT_KNOW        = 'COND_RAPPORT_KNOW';

   // Flags associés au rapport
   TPL_TAB_CONDLOOP_TROP_BIEN_DEF       = 'COND_IS_TROP_BIEN_DEF';
   TPL_TAB_CONDLOOP_NIV_ESP_ELEVE       = 'COND_IS_NIV_ESP_ELEVE';
   TPL_TAB_CONDLOOP_NE_JAMAIS_ATTAQUER  = 'COND_IS_NE_JAMAIS_ATTAQUER';
   TPL_TAB_CONDLOOP_POULE_AUX_OEUFS_DOR = 'COND_IS_POULES_AUX_OEUFS_DOR';

   TPL_TAB_CONDLOOP_TROP_PEU_DEV        = 'COND_IS_TROP_PEU_DEV';
   TPL_TAB_CONDLOOP_DEJA_RECYCLE        = 'COND_IS_DEJA_RECYCLE';
   TPL_TAB_CONDLOOP_A_RECYCLER          = 'COND_IS_A_RECYCLER';



   // défense
   TPL_TAB_VARLOOP_DEFENSE_SCORE         = 'LAST_DEFENSE_SCORE';
   TPL_TAB_CONDLOOP_DEFENSE_SCORE        = 'COND_LAST_DEFENSE_SCORE';

   // nb de recycleur
   TPL_TAB_VARLOOP_NB_RECYCL             = 'LAST_NB_RECYCLEUR';
   TPL_TAB_CONDLOOP_NB_RECYCL            = 'COND_LAST_NB_RECYCLEUR';


   TPL_TAB_CONDLOOP_CONTRE_ESPIONNAGE    = 'COND_CONTRE_ESPIONNAGE';
   TPL_TAB_CONDLOOP_NB_FOIS_SONDE        = 'COND_NB_FOIS_SONDE';
   TPL_TAB_CONDLOOP_NB_FOIS_ATTAQUE      = 'COND_NB_FOIS_ATTACK';


   // ressources
   TPL_TAB_VARLOOP_RESSOURCE_METAL_STR   = 'RESSOURCE_METAL';
   TPL_TAB_CONDLOOP_RESSOURCE_METAL      = 'COND_RESSOURCE_METAL';

   TPL_TAB_VARLOOP_RESSOURCE_CRISTAL_STR   = 'RESSOURCE_CRISTAL';
   TPL_TAB_CONDLOOP_RESSOURCE_CRISTAL      = 'COND_RESSOURCE_CRISTAL';

   TPL_TAB_VARLOOP_RESSOURCE_DEUTERIUM_STR   = 'RESSOURCE_DEUTERIUM';
   TPL_TAB_CONDLOOP_RESSOURCE_DEUTERIUM      = 'COND_RESSOURCE_DEUTERIUM';


   // GT et PT possible
   TPL_TAB_CONDLOOP_RESSOURCE_MAX_CAPTURABLE     = 'COND_RESSOURCE_MAX_CAPTURABLE';
   TPL_TAB_CONDLOOP_NB_GT                        = 'COND_RESSOURCE_NB_GT';
   TPL_TAB_CONDLOOP_NB_PT                        = 'COND_RESSOURCE_NB_PT';

   TPL_TAB_VARLOOP_NB_GT                        = 'RESSOURCE_NB_GT';
   TPL_TAB_VARLOOP_NB_PT                        = 'RESSOURCE_NBPT';


   TPL_TAB_VARLOOP_NB_VAISSEAUX         = 'NB_VAISSEAUX';
   TPL_TAB_CONDLOOP_NB_VAISSEAUX        = 'COND_NB_VAISSEAUX';

   TPL_TAB_VARLOOP_NB_UNITES_DEFENSIVES  = 'NB_UNITES_DEFENSIVES';
   TPL_TAB_CONDLOOP_NB_UNITES_DEFENSIVES = 'COND_NB_UNITES_DEFENSIVES';


   // dernier sondage
   TPL_TAB_VARLOOP_DATE_LAST_SONDAGE_UNIX         = 'LAST_DATE_SONDAGE_UNIX';
   TPL_TAB_CONDLOOP_DATE_LAST_SONDAGE_DURATION     = 'COND_LAST_DATE_SONDAGE_DURATION';
   TPL_TAB_VARLOOP_DATE_LAST_SONDAGE_DURATION_STR = 'LAST_DATE_SONDAGE_DURATION_STR';

   // dernière attaque
   TPL_TAB_VARLOOP_DATE_LAST_ATTACK_UNIX         = 'LAST_DATE_ATTACK_UNIX';
   TPL_TAB_CONDLOOP_DATE_LAST_ATTACK_DURATION    = 'COND_LAST_DATE_ATTACK_DURATION';
   TPL_TAB_VARLOOP_DATE_LAST_ATTACK_DURATION_STR = 'LAST_DATE_ATTACK_DURATION_STR';




   procedure ttdSetRapport(peRapport: PRapportHead; t: TTemplatePage);

   procedure ttdSetGalaxyAndStats(peGalaxie: PGalaxiePlanete; t: TTemplatePage; Player: TPlayerFinal);
   procedure ttdSetGalaxy(peGalaxie: PGalaxiePlanete; t: TTemplatePage; CurrProfil: TProfilsAttack);


var
   ttdCurrentDate: int64;

implementation

uses sFonctionsChaines,
     Math,
     ESBDates,
     gnugettext;

procedure ttdSetRapport(peRapport: PRapportHead; t: TTemplatePage);
var PourcentGT, PourcentPT: single;
    iDiff, LastDate: int64;
    i: integer;
    TotalRessource: integer;
begin

    if peRapport <> nil then begin

       // rapport connu
       t.ConditionSet(TPL_TAB_CONDLOOP_RAPPORT_KNOW, 1);

       // Les flags du rapport
       t.BoucleSetCond(TPL_TAB_CONDLOOP_TROP_BIEN_DEF       , sfcFlagsIsIn(FLAG_TROP_BIEN_DEF, peRapport.Flags));
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NIV_ESP_ELEVE       , sfcFlagsIsIn(FLAG_NIV_ESP_ELEVE, peRapport.Flags));
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NE_JAMAIS_ATTAQUER  , sfcFlagsIsIn(FLAG_NE_JAMAIS_ATTACK, peRapport.Flags));
       t.BoucleSetCond(TPL_TAB_CONDLOOP_POULE_AUX_OEUFS_DOR , sfcFlagsIsIn(FLAG_POULE_AUX_OEUFS_DOR, peRapport.Flags));

       t.BoucleSetCond(TPL_TAB_CONDLOOP_TROP_PEU_DEV    , sfcFlagsIsIn(FLAG_MODE_TROP_PEUDEV, peRapport.Flags));
       t.BoucleSetCond(TPL_TAB_CONDLOOP_A_RECYCLER      , sfcFlagsIsIn(FLAG_A_RECYCLER, peRapport.Flags));
       t.BoucleSetCond(TPL_TAB_CONDLOOP_DEJA_RECYCLE    , sfcFlagsIsIn(FLAG_DEJA_RECYCLER, peRapport.Flags));


       // Evaluation de la defense
       if scDefense in peRapport.SectionConnu then begin
          t.BoucleSetVar(TPL_TAB_VARLOOP_DEFENSE_SCORE  , sfcFormatStrToMilliers(peRapport.DefenseScore));
          t.BoucleSetCond(TPL_TAB_CONDLOOP_DEFENSE_SCORE, peRapport.DefenseScore);

       end else begin
          // inconnu
          t.BoucleSetVar(TPL_TAB_VARLOOP_DEFENSE_SCORE  , 'Unk');
          t.BoucleSetCond(TPL_TAB_CONDLOOP_DEFENSE_SCORE, -2);
       end;


       // Nombre de recycleur
       if scFlotte in peRapport.SectionConnu then begin
          if peRapport.RecyclageNbRessource > 0 then begin
             PourcentGT := peRapport.RecyclageNbRessource / 20000;
             i := Ceil(PourcentGT);

             t.BoucleSetVar(TPL_TAB_VARLOOP_NB_RECYCL  , sfcDivistionResultEnString(peRapport.RecyclageNbRessource, 20000, 2));
             t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_RECYCL, i);
          end else begin
             // pas de flotte à quai, 0 recycleur
             t.BoucleSetVar(TPL_TAB_VARLOOP_NB_RECYCL  , '0');
             t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_RECYCL, 0);
          end;

       end else begin
          // inconnu
          t.BoucleSetVar(TPL_TAB_VARLOOP_NB_RECYCL , '-');
          t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_RECYCL, -2);
       end;


       ////////////
       // Nombre de GT pour récupérer toute les ressources possible
       TotalRessource := peRapport.Ressource.Metal + peRapport.Ressource.Cristal + peRapport.Ressource.Deuterium;
       TotalRessource := TotalRessource shr 1;
       PourcentGT := TotalRessource / 24500;
       PourcentPT := TotalRessource /  4950;

       t.BoucleSetCond(TPL_TAB_CONDLOOP_RESSOURCE_MAX_CAPTURABLE, TotalRessource);

       t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_GT, Ceil(PourcentGT));
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_PT, Ceil(PourcentPT));

       t.BoucleSetVar(TPL_TAB_VARLOOP_NB_GT, sfcDivistionResultEnString(TotalRessource, 24500, 2));
       t.BoucleSetVar(TPL_TAB_VARLOOP_NB_PT, sfcDivistionResultEnString(TotalRessource, 4950, 2));

       

       // Date de sondage
       LastDate := mrGetMostRecentDate(peRapport.DateLastEspionnage);
       iDiff := ttdCurrentDate - LastDate;

       t.BoucleSetVar(TPL_TAB_VARLOOP_DATE_LAST_SONDAGE_UNIX, LastDate);

       if iDiff < 2 then begin
          t.BoucleSetVar(TPL_TAB_CONDLOOP_DATE_LAST_SONDAGE_DURATION   , 1);
          t.BoucleSetVar(TPL_TAB_VARLOOP_DATE_LAST_SONDAGE_DURATION_STR, _('1 sec.'));
       end else begin
          t.BoucleSetVar(TPL_TAB_CONDLOOP_DATE_LAST_SONDAGE_DURATION   , iDiff);
          t.BoucleSetVar(TPL_TAB_VARLOOP_DATE_LAST_SONDAGE_DURATION_STR, ESBDGetDureeStrings(iDiff, true, 3));
       end;



       // Dernière attaque
       LastDate := mrGetMostRecentDate(peRapport.DateLastAttaque);
       if LastDate < 100 then begin
          // jamais attaqué
          t.BoucleSetVar(TPL_TAB_CONDLOOP_DATE_LAST_ATTACK_DURATION   , -1);
          t.BoucleSetVar(TPL_TAB_VARLOOP_DATE_LAST_ATTACK_DURATION_STR, _('Jamais'));

       end else begin
          iDiff := ttdCurrentDate - LastDate;

          t.BoucleSetVar(TPL_TAB_VARLOOP_DATE_LAST_ATTACK_UNIX, LastDate);

          if iDiff < 2 then begin
             t.BoucleSetVar(TPL_TAB_CONDLOOP_DATE_LAST_ATTACK_DURATION   , 1);
             t.BoucleSetVar(TPL_TAB_VARLOOP_DATE_LAST_ATTACK_DURATION_STR, _('1 sec.'));
          end else begin
             t.BoucleSetVar(TPL_TAB_CONDLOOP_DATE_LAST_ATTACK_DURATION   , iDiff);
             t.BoucleSetVar(TPL_TAB_VARLOOP_DATE_LAST_ATTACK_DURATION_STR, ESBDGetDureeStrings(iDiff, true, 3));
          end;
       end;


       // contre espionnage
       t.BoucleSetCond(TPL_TAB_CONDLOOP_CONTRE_ESPIONNAGE  , peRapport.PourcentContreEspion);

       // stats d'attaque et de sondage
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_FOIS_SONDE      , peRapport.NbEspionnage);
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_FOIS_ATTAQUE    , peRapport.NbAttack);


       // ressources
       t.BoucleSetVar(TPL_TAB_VARLOOP_RESSOURCE_METAL_STR    , sfcFormatStrToMilliers(peRapport.Ressource.Metal));
       t.BoucleSetCond(TPL_TAB_CONDLOOP_RESSOURCE_METAL      , peRapport.Ressource.Metal);

       t.BoucleSetVar(TPL_TAB_VARLOOP_RESSOURCE_CRISTAL_STR  ,sfcFormatStrToMilliers(peRapport.Ressource.Cristal));
       t.BoucleSetCond(TPL_TAB_CONDLOOP_RESSOURCE_CRISTAL    , peRapport.Ressource.Cristal);

       t.BoucleSetVar(TPL_TAB_VARLOOP_RESSOURCE_DEUTERIUM_STR, sfcFormatStrToMilliers(peRapport.Ressource.Deuterium));
       t.BoucleSetCond(TPL_TAB_CONDLOOP_RESSOURCE_DEUTERIUM  , peRapport.Ressource.Deuterium);



       // nombre de vaisseaux
       t.BoucleSetVar(TPL_TAB_VARLOOP_NB_VAISSEAUX          , sfcFormatStrToMilliers(peRapport.NbFlotte));
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_VAISSEAUX        , peRapport.NbFlotte);

       // nombre d'unités défensives
       t.BoucleSetVar(TPL_TAB_VARLOOP_NB_UNITES_DEFENSIVES  , sfcFormatStrToMilliers(peRapport.NbDefense));
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_UNITES_DEFENSIVES, peRapport.NbDefense);





    end else begin

       // rapport inconnu
       t.ConditionSet(TPL_TAB_CONDLOOP_RAPPORT_KNOW, 0);

       // Les flags du rapport
       t.BoucleSetCond(TPL_TAB_CONDLOOP_TROP_BIEN_DEF       , 0);
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NIV_ESP_ELEVE       , 0);
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NE_JAMAIS_ATTAQUER  , 0);
       t.BoucleSetCond(TPL_TAB_CONDLOOP_POULE_AUX_OEUFS_DOR , 0);

       t.BoucleSetCond(TPL_TAB_CONDLOOP_TROP_PEU_DEV       , 0);
       t.BoucleSetCond(TPL_TAB_CONDLOOP_A_RECYCLER         , 0);
       t.BoucleSetCond(TPL_TAB_CONDLOOP_DEJA_RECYCLE       , 0);


       // Evaluation de la defense
       t.BoucleSetVar(TPL_TAB_VARLOOP_DEFENSE_SCORE  , '');
       t.BoucleSetCond(TPL_TAB_CONDLOOP_DEFENSE_SCORE, -1);

       // Nombre de recycleur
       t.BoucleSetVar(TPL_TAB_VARLOOP_NB_RECYCL  , '');
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_RECYCL, -1);


       // Date de sondage
       t.BoucleSetVar(TPL_TAB_VARLOOP_DATE_LAST_SONDAGE_UNIX        , 0);
       t.BoucleSetVar(TPL_TAB_CONDLOOP_DATE_LAST_SONDAGE_DURATION    , 0);
       t.BoucleSetVar(TPL_TAB_VARLOOP_DATE_LAST_SONDAGE_DURATION_STR, '');

       // Dernière attaque
       t.BoucleSetVar(TPL_TAB_VARLOOP_DATE_LAST_ATTACK_UNIX        , 0);
       t.BoucleSetVar(TPL_TAB_CONDLOOP_DATE_LAST_ATTACK_DURATION    , 0);
       t.BoucleSetVar(TPL_TAB_VARLOOP_DATE_LAST_ATTACK_DURATION_STR, '');


       // contre espionnage
       t.BoucleSetCond(TPL_TAB_CONDLOOP_CONTRE_ESPIONNAGE  , -1);

       // stats d'attaque et de sondage
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_FOIS_SONDE      , -1);
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_FOIS_ATTAQUE    , -1);



       // ressources
       t.BoucleSetVar(TPL_TAB_VARLOOP_RESSOURCE_METAL_STR  , '');
       t.BoucleSetCond(TPL_TAB_CONDLOOP_RESSOURCE_METAL    , -1);

       t.BoucleSetVar(TPL_TAB_VARLOOP_RESSOURCE_CRISTAL_STR  , '');
       t.BoucleSetCond(TPL_TAB_CONDLOOP_RESSOURCE_CRISTAL    , -1);

       t.BoucleSetVar(TPL_TAB_VARLOOP_RESSOURCE_DEUTERIUM_STR  , '');
       t.BoucleSetCond(TPL_TAB_CONDLOOP_RESSOURCE_DEUTERIUM    , -1);



       t.BoucleSetVar(TPL_TAB_VARLOOP_NB_VAISSEAUX          , '');
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_VAISSEAUX        , -1);

       t.BoucleSetVar(TPL_TAB_VARLOOP_NB_UNITES_DEFENSIVES  , '');
       t.BoucleSetCond(TPL_TAB_CONDLOOP_NB_UNITES_DEFENSIVES, -1);



    end;

end;
     
procedure ttdSetGalaxyAndStats(peGalaxie: PGalaxiePlanete; t: TTemplatePage; Player: TPlayerFinal);
var bIsPlaneteVide: boolean;
    peStats: PPlayerStats;
begin

    // définit les variables de galaxies
    ttdSetGalaxy(peGalaxie, t, Player.Conf);


    if (Player.StatsPlayer = nil) or (Player.StatsPlayerFlottes = nil) or (Player.StatsPlayerRecherche = nil) then begin
       // stats invalide
       exit;
    end;

    
    // et s'occupe des stats
    if peGalaxie <> nil then begin

       // Nombre de points du Joueur
       peStats := Player.StatsPlayer.Get_Pointeur(peGalaxie.Joueur);

       if peStats = nil then begin
          t.BoucleSetCond(TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS, 0);
          t.BoucleSetVar(TPL_TAB_VARLOOP_POINTS                  , _('Non classé'));

       end else begin
          t.BoucleSetCond(TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS, peStats.Place);
          t.BoucleSetVar(TPL_TAB_VARLOOP_POINTS                  , sfcFormatStrToMilliers(peStats.Points));
       end;


       
       // Nombre de vaisseaux du Joueur
       peStats := Player.StatsPlayerFlottes.Get_Pointeur(peGalaxie.Joueur);

       if peStats = nil then begin
          t.BoucleSetCond(TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS_FLOTTE, 0);
          t.BoucleSetVar(TPL_TAB_VARLOOP_POINTS_FLOTTE                  , _('Non classé'));

       end else begin
          t.BoucleSetCond(TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS_FLOTTE, peStats.Place);
          t.BoucleSetVar(TPL_TAB_VARLOOP_POINTS_FLOTTE                  , sfcFormatStrToMilliers(peStats.Points));
       end;


       // Nombre de recherche du Joueur
       peStats := Player.StatsPlayerRecherche.Get_Pointeur(peGalaxie.Joueur);

       if peStats = nil then begin
          t.BoucleSetCond(TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS_RESEARCH, 0);
          t.BoucleSetVar(TPL_TAB_VARLOOP_POINTS_RESEARCH                  , _('Non classé'));

       end else begin
          t.BoucleSetCond(TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS_RESEARCH, peStats.Place);
          t.BoucleSetVar(TPL_TAB_VARLOOP_POINTS_RESEARCH                  , sfcFormatStrToMilliers(peStats.Points));
       end;

    end else begin
       // le nom du joueur n'est alors pas connu
       // et la planète n'existe peut-être pas ?

       t.BoucleSetCond(TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS         , -1);
       t.BoucleSetVar(TPL_TAB_VARLOOP_POINTS           , _('Inconnu'));

       t.BoucleSetCond(TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS_FLOTTE  , -1);
       t.BoucleSetVar(TPL_TAB_VARLOOP_POINTS_FLOTTE    , _('Inconnu'));

       t.BoucleSetCond(TPL_TAB_CONDLOOP_CLASSEMENT_RANG_POINTS_RESEARCH, -1);
       t.BoucleSetVar(TPL_TAB_VARLOOP_POINTS_RESEARCH  , _('Inconnu'));
    end;


    bIsPlaneteVide := false;



end;

procedure ttdSetGalaxy(peGalaxie: PGalaxiePlanete; t: TTemplatePage; CurrProfil: TProfilsAttack);
begin

    if peGalaxie <> nil then begin
         t.BoucleSetCond(TPL_TAB_CONDLOOP_GALAXY_DATA_KNOW, 1);

         t.BoucleSetCond(TPL_TAB_CONDLOOP_PLAYER_FAIBLE      , sfcFlagsIsIn(CNT_GALAXIE_FLAGS_PROTECTION_NOOB_TROPFAIBLE, peGalaxie.Flags));
         t.BoucleSetCond(TPL_TAB_CONDLOOP_PLAYER_FORT        , sfcFlagsIsIn(CNT_GALAXIE_FLAGS_PROTECTION_NOOB_TROPFORT, peGalaxie.Flags));
         t.BoucleSetCond(TPL_TAB_CONDLOOP_PLANETE_NON_OCCUPE , sfcFlagsIsIn(CNT_GALAXIE_FLAGS_PLANETE_NON_OCCUPEE, peGalaxie.Flags));
         t.BoucleSetCond(TPL_TAB_CONDLOOP_PLAYER_MODE_VACANCE, sfcFlagsIsIn(CNT_GALAXIE_FLAGS_MODE_VACANCES, peGalaxie.Flags));
         t.BoucleSetCond(TPL_TAB_CONDLOOP_ASTEROIDE          , sfcFlagsIsIn(CNT_GALAXIE_FLAGS_ASTEROIDES, peGalaxie.Flags));

         t.BoucleSetCond(TPL_TAB_CONDLOOP_INACTIF_LEVEL_1, sfcFlagsIsIn(CNT_GALAXIE_FLAGS_INACTIF_2SEMAINES, peGalaxie.Flags));
         t.BoucleSetCond(TPL_TAB_CONDLOOP_INACTIF_LEVEL_2, sfcFlagsIsIn(CNT_GALAXIE_FLAGS_INACTIF_4SEMAINES, peGalaxie.Flags));


         t.BoucleSetVar(TPL_TAB_VARLOOP_ALLIANCE            , peGalaxie.Alliance);
         t.BoucleSetCond(TPL_TAB_CONDLOOP_IS_ALLIANCE_ALLIEE, CurrProfil.IsAllianceAlliees(peGalaxie.Alliance));

         t.BoucleSetVar(TPL_TAB_VARLOOP_JOUEUR       , peGalaxie.Joueur);
         t.BoucleSetVar(TPL_TAB_VARLOOP_JOUEUR_FLAGS , gpGetFlagsStrToUseWithParentheseIfExist(peGalaxie.Flags));


    end else begin
         t.BoucleSetCond(TPL_TAB_CONDLOOP_GALAXY_DATA_KNOW, 0);

         t.BoucleSetCond(TPL_TAB_CONDLOOP_PLAYER_FAIBLE      , 0);
         t.BoucleSetCond(TPL_TAB_CONDLOOP_PLAYER_FORT        , 0);
         t.BoucleSetCond(TPL_TAB_CONDLOOP_PLANETE_NON_OCCUPE , 0);
         t.BoucleSetCond(TPL_TAB_CONDLOOP_PLAYER_MODE_VACANCE, 0);
         t.BoucleSetCond(TPL_TAB_CONDLOOP_ASTEROIDE          , 0);

         t.BoucleSetCond(TPL_TAB_CONDLOOP_INACTIF_LEVEL_1    , 0);
         t.BoucleSetCond(TPL_TAB_CONDLOOP_INACTIF_LEVEL_2    , 0);

         
         t.BoucleSetVar(TPL_TAB_VARLOOP_ALLIANCE, '---');
         t.BoucleSetCond(TPL_TAB_CONDLOOP_IS_ALLIANCE_ALLIEE , 0);

         t.BoucleSetVar(TPL_TAB_VARLOOP_JOUEUR      , '---');
         t.BoucleSetVar(TPL_TAB_VARLOOP_JOUEUR_FLAGS, '');
    end;

end;


end.
